//
//  ZLBaseViewController.swift
//  Swift-weibo
//
//  Created by 朱万龙 on 2016/12/9.
//  Copyright © 2016年 zwl. All rights reserved.
//

import UIKit

class ZLBaseViewController: UIViewController {
    //用户是否登陆，刷新标记
    var userLogon = true
    var isPullup = false
    //访客视图JSON
    var visitorInfo : [String:String]?
    
    //懒加载自定义NavBar
    lazy var navigationBar : UINavigationBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: UIScreen.zl_screenWidth(), height: 64))
    lazy var navItem : UINavigationItem = UINavigationItem()
    
    var tableView : UITableView?
    var refreshControl : UIRefreshControl?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        //取消自动缩进   ---- 如果隐藏了导航栏   会自动缩进20个点
        automaticallyAdjustsScrollViewInsets = false
        setUpUI()
        loadData()
    }
    //调用title的setter方法，设置自定义navBarItem的title
    override var title: String?{
        didSet{
            navItem.title = title
        }
    }
    //准备空数据方法。具体实现由子类负责
    func loadData() {
        //如果子类不实现任何方法，默认关闭刷新控件
        refreshControl?.endRefreshing()
    }
}
// MARK: - 设置界面
extension ZLBaseViewController{
    
    fileprivate func setUpUI() {
        
        view.backgroundColor = UIColor.zl_random()
        
        setUpNavigation()
 
        userLogon ? setUpTableView() : setUpVisitorView()
   
    }
    fileprivate func setUpVisitorView(){
        let bgView = ZLVisitorView(frame: view.bounds)
        
        view.insertSubview(bgView, belowSubview: navigationBar)
        //传递访客界面JSON
        bgView.visitorInfo = visitorInfo
        
        //  给按钮添加方法
        bgView.loginButton.addTarget(self, action: #selector(loginButtonCilck), for: .touchUpInside)
        bgView.registerButton.addTarget(self, action: #selector(registerButtonCilck), for: .touchUpInside)
        
        //设置访客视图Item
        navItem.leftBarButtonItem = UIBarButtonItem(title: "注册", style: .plain, target: self, action: #selector(registerButtonCilck))
        navItem.rightBarButtonItem = UIBarButtonItem(title: "登录", style: .plain, target: self, action: #selector(loginButtonCilck))
    }
    /// MARK: - 用户登录后重写此方法 （不用理会为理会操作）
    //设置TableView
    func setUpTableView() {
        tableView = UITableView(frame: view.bounds, style: .plain)
    //设置内容缩进
    tableView?.contentInset = UIEdgeInsets(top: navigationBar.bounds.height,
                                           left: 0,
                                           bottom: tabBarController?.tabBar.bounds.height ?? 49,
                                           right: 0)
    //设置数据源代理 ： 子类直接实现数据源方法
    tableView?.delegate = self
    tableView?.dataSource = self
        view.insertSubview(tableView!, belowSubview: navigationBar)
    refreshControl = UIRefreshControl()
    tableView?.addSubview(refreshControl!)
    refreshControl?.addTarget(self, action: #selector(refreshCilck), for: .valueChanged)
    }
    @objc fileprivate func refreshCilck(){
        
    loadData()
        
    }
    //设置Nav
   fileprivate func setUpNavigation() {
                //添加自定义NavBar
        view.addSubview(navigationBar)
        navigationBar.items = [navItem]
        //设置NavBar颜色，防止push时高亮
        navigationBar.barTintColor = UIColor.zl_color(withHex: 0xF6F6F6)
        //设置navItem字体颜色
        navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.darkGray]
        //设置navItem的Item字体颜色
        navigationBar.tintColor = UIColor.orange
    }
}
// MARK: - button 监听方法
extension ZLBaseViewController{
    
    @objc func loginButtonCilck(){
        print("loginButtonCilck")
    }
    @objc func registerButtonCilck(){
        print("registerButtonCilck")
    }
    
}
/// 分离tableView的数据源方法
extension ZLBaseViewController: UITableViewDataSource ,UITableViewDelegate  {
    //基类准备方法，子类负责具体实现
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 0
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        return UITableViewCell()
    }
    //在显示最后一行的时候做上拉刷新    做无缝下拉
    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        //1、取出最后一行
        //1.1 取出当前行
        let row = indexPath.row
        //1.2 获取分组数量 （-1 获取到最后一个）
        let section = tableView.numberOfSections - 1
        //1.3 获取最后分组的行数
        let count = tableView.numberOfRows(inSection: section)
        //1.4 判断是否为空
        if row < 0 || section < 0 {
            return
        }
        //2、判断是否是最后一行
        if row == (count - 1) && !isPullup{
            print("---上拉刷新---")
            //改变标记
            isPullup = true
            //开始刷新
            loadData()
        }
        
    }
    
}
